package redis

import (
	"context"
	"fmt"
	"github.com/go-redis/redis/v8"
	"muziai-server/global"
)

// 通用修改值
func (RedisService) UpdateFieldValue(ticket string, fieldName string, newValue interface{}) error {
	ctx := context.Background()

	// 从 Redis 中查找该 ticket 的 fieldName 状态
	currentValue, err := global.Redis.HGet(ctx, ticket, fieldName).Result()
	if err == redis.Nil {
		// ticket 不存在或已过期，返回自定义错误
		return fmt.Errorf("ticket not found or expired")
	} else if err != nil {
		// 其他 Redis 操作错误
		return err
	}

	// 如果当前值已经是 newValue，避免重复更新
	if currentValue == fmt.Sprintf("%v", newValue) {
		return fmt.Errorf("ticket has already been %v", newValue)
	}

	// 更新指定的 fieldName 为 newValue
	if err := global.Redis.HSet(ctx, ticket, fieldName, newValue).Err(); err != nil {
		return err
	}

	return nil
}

func (RedisService) IsTicketScanned(ticket string) (bool, error) {
	ctx := context.Background()

	// 从 Redis 中获取对应 ticket 的 scanned 字段
	scannedValue, err := global.Redis.HGet(ctx, ticket, "scanned").Result()
	if err == redis.Nil {
		// ticket 不存在或已经过期
		return false, fmt.Errorf("ticket not found or expired")
	} else if err != nil {
		// 其他 Redis 操作错误
		return false, err
	}

	// 如果 scannedValue 为 "true"，表示已经被扫了
	return scannedValue == "1", nil
}
